import axios from 'axios';
import { VehicleFormData } from '../types';
import { OPENAI_CONFIG } from '../config';

// AI打分结果接口
export interface AIScoreResult {
  score: number; // 0-5分，支持一位小数
  reasoning: string; // 评分理由
  suggestions: string[]; // 改进建议
  confidence: number; // 置信度 0-1
}

// 评分维度
export interface ScoreDimensions {
  brandValue: number; // 品牌价值
  condition: number; // 车况
  mileage: number; // 里程合理性
  price: number; // 价格合理性
  marketDemand: number; // 市场需求
}

export class AIScoringService {
  // 使用后端代理的OpenAI进行评分
  static async scoreWithOpenAI(vehicleData: VehicleFormData): Promise<AIScoreResult> {
    try {
      // 使用后端代理接口
      const response = await axios.post('http://192.168.192.147:3000/ai/score-vehicle', {
        brand: vehicleData.brand,
        model: vehicleData.model,
        year: vehicleData.year,
        mileage: vehicleData.mileage,
        price: vehicleData.price,
        condition: vehicleData.condition || '良好',
        description: vehicleData.description || ''
      }, {
        timeout: 30000
      });

      if (response.data.success) {
        return response.data.data;
      } else {
        throw new Error(response.data.message || 'AI评分失败');
      }
    } catch (error) {
      console.error('AI评分失败:', error);
      throw new Error('AI评分服务暂时不可用');
    }
  }

  // 使用百度文心一言进行评分（备用方案）
  static async scoreWithBaidu(vehicleData: VehicleFormData): Promise<AIScoreResult> {
    try {
      // 先获取access token
      const tokenResponse = await axios.get(
        `https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=${process.env.BAIDU_API_KEY}&client_secret=${process.env.BAIDU_SECRET_KEY}`
      );
      
      const accessToken = tokenResponse.data.access_token;
      const prompt = this.buildScoringPrompt(vehicleData);

      const response = await axios.post(`https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions?access_token=${accessToken}`, {
        messages: [
          {
            role: 'user',
            content: prompt
          }
        ]
      }, {
        headers: {
          'Content-Type': 'application/json'
        }
      });

      const result = this.parseBaiduResponse(response.data.result);
      return result;
    } catch (error) {
      console.error('百度AI评分失败:', error);
      throw new Error('AI评分服务暂时不可用');
    }
  }

  // 构建评分提示词
  private static buildScoringPrompt(vehicleData: VehicleFormData): string {
    return `
请根据以下车辆信息进行专业评分（0-5分，支持一位小数）：

车辆基本信息：
- 品牌：${vehicleData.brand}
- 型号：${vehicleData.model}
- 年份：${vehicleData.year}
- 里程：${vehicleData.mileage}公里
- 价格：${vehicleData.price}万元
- 车况：${vehicleData.condition}
- 燃料类型：${vehicleData.fuelType}
- 变速箱：${vehicleData.transmission}
- 车身类型：${vehicleData.bodyType}
- 颜色：${vehicleData.color}
- 省份：${vehicleData.province}

请从以下维度进行评分：
1. 品牌价值（0-1分）
2. 车况评估（0-1分）
3. 里程合理性（0-1分）
4. 价格合理性（0-1分）
5. 市场需求（0-1分）

请返回JSON格式：
{
  "score": 3.5,
  "reasoning": "评分理由",
  "suggestions": ["建议1", "建议2"],
  "confidence": 0.85,
  "dimensions": {
    "brandValue": 0.8,
    "condition": 0.7,
    "mileage": 0.6,
    "price": 0.7,
    "marketDemand": 0.7
  }
}
    `;
  }

  // 解析OpenAI响应
  private static parseOpenAIResponse(content: string): AIScoreResult {
    try {
      // 尝试提取JSON
      const jsonMatch = content.match(/\{[\s\S]*\}/);
      if (jsonMatch) {
        const parsed = JSON.parse(jsonMatch[0]);
        return {
          score: Math.min(5, Math.max(0, parseFloat(parsed.score) || 0)),
          reasoning: parsed.reasoning || '评分完成',
          suggestions: parsed.suggestions || [],
          confidence: Math.min(1, Math.max(0, parseFloat(parsed.confidence) || 0.8))
        };
      }
      
      // 如果无法解析JSON，尝试提取分数
      const scoreMatch = content.match(/评分[：:]\s*(\d+\.?\d*)/);
      const score = scoreMatch ? parseFloat(scoreMatch[1]) : 3.0;
      
      return {
        score: Math.min(5, Math.max(0, score)),
        reasoning: content,
        suggestions: [],
        confidence: 0.7
      };
    } catch (error) {
      console.error('解析OpenAI响应失败:', error);
      return {
        score: 3.0,
        reasoning: '评分解析失败',
        suggestions: [],
        confidence: 0.5
      };
    }
  }

  // 解析百度响应
  private static parseBaiduResponse(content: string): AIScoreResult {
    return this.parseOpenAIResponse(content); // 使用相同的解析逻辑
  }

  // 获取评分建议
  static getScoreSuggestions(score: number): string[] {
    if (score >= 4.5) {
      return ['车况优秀，建议适当提高价格', '市场需求旺盛，可以快速出手'];
    } else if (score >= 3.5) {
      return ['车况良好，价格合理', '建议完善车辆照片和描述'];
    } else if (score >= 2.5) {
      return ['车况一般，建议适当降价', '需要详细说明车况问题'];
    } else {
      return ['车况较差，建议大幅降价', '建议先进行维修再出售'];
    }
  }
} 